// 包声明：声明该类属于com.itheima.loop包，用于组织代码结构
package com.itheima.loop;

// 类定义：定义一个名为WhileTest5的公共类
public class WhileTest5 {
    // 主方法：程序的入口点，JVM会从这里开始执行代码
    public static void main(String[] args) {
        // 目标：完成while循环的需求：复利计算。
        // 打印语句：调用calc()方法计算复利翻倍所需年数并输出结果
        System.out.println("需要多少年：" + calc());
        // 打印语句：调用calc2()方法计算纸张折叠到珠峰高度所需次数并输出结果
        System.out.println("需要折叠多少次：" + calc2());
    }

    // 方法定义：复利计算方法，计算本金翻倍所需年数
    // 问题描述：本金10万，年利率1.7%，计算多少年后本金翻倍
    public static int calc() {
        // 1、定义变量记录程序需要的处理数据。
        // money变量：存储本金和每年的复利金额，初始值为100000（10万元）
        double money = 100000;
        // rate变量：存储年利率，1.7%转换为小数是0.017
        double rate = 0.017;
        // year变量：记录存款年数，初始值为0
        int year = 0; // 要存多少年的意思。

        // 2、控制循环，只要发现本金还是小于目标金额200000时，就需要继续存一年。
        // while循环条件：只要当前金额小于200000（翻倍目标），就继续循环
        while ( money < 200000 ){
            // 每年开始，年数增加1
            year++;
            // 金额要计算一下：当前金额乘以(1+利率)，计算复利后的金额
            money = money * (1 + rate);
            // 打印当前年份的金额，用于观察每年的变化情况
            System.out.println("第" +year+"年有多少钱：" + money);
        }

        // 返回计算得到的年数
        return year;
    }

    // 方法定义：纸张折叠计算方法
    // 问题描述：珠穆朗玛峰高度是8848860毫米，纸张厚度是0.1毫米，计算折叠多少次可以达到山峰高度
    public static int calc2() {
        // 1、把数据拿到程序中来。
        // height变量：存储珠穆朗玛峰的高度，单位是毫米（8848860毫米=8848.86米）
        double height = 8848860;
        // thickness变量：存储纸张的初始厚度，单位是毫米
        double thickness = 0.1;
        // count变量：记录折叠次数，初始值为0
        int count = 0;

        // 2、控制循环，只要纸张厚度还没有达到珠穆朗玛峰高度，就需要继续折叠。
        // while循环条件：只要纸张厚度小于珠穆朗玛峰高度，就继续循环
        while (thickness < height) {
            // 3、计算折叠次数：每次循环折叠一次，次数加1
            count++;
            // 4、计算纸张厚度：每次折叠纸张厚度翻倍，等同于 thickness = thickness * 2
            thickness *= 2; // thickness = thickness * 2;
        }
        // 5、返回折叠次数：当纸张厚度达到或超过山峰高度时，返回需要的折叠次数
        return count;
    }
}
